package cl.tinet.trainee;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import cl.tinet.trainee.model.Carro;
import cl.tinet.trainee.model.DetalleCarro;
import cl.tinet.trainee.model.ListaProductos;
import cl.tinet.trainee.model.Producto;
import cl.tinet.trainee.model.Usuario;

/**
 * Session Bean implementation class ejemploBean
 */
@Stateless
public class ejemploBean implements ejemploBeanLocal {
    
	@PersistenceContext(unitName="conexionTest")
	private EntityManager entityManager;
	
	public List<Usuario> listar() {
	    Query query = null;
	    query = entityManager
				.createQuery("SELECT u FROM Usuario u");
		
		return (ArrayList<Usuario>) query.getResultList();
		
	}
	
	public List<DetalleCarro> obtenerListaDetalleCarro(int idCarro){
	    List<DetalleCarro> listDetalle = new ArrayList<DetalleCarro>();
	    Query query = null;
	    String strQuery = null;
	    strQuery ="SELECT d FROM DetalleCarro d WHERE d.idCarroDetalle="+idCarro;
	    query = entityManager.createQuery(strQuery);
	    listDetalle = (List<DetalleCarro>)query.getResultList();
	    return listDetalle;
	}
	
	public int obtenerIdCarro(){
	    
	    Carro carro = new Carro();
	    Query query = null;
	    query = entityManager.createQuery("SELECT MAX(c.idCarro) FROM Carro c");
	    Integer objetoId = (Integer)query.getSingleResult();
	    int id = objetoId;
	    return id;
	}
	
	
	public void ingresarDetalleCarro(DetalleCarro detCarro){
	    boolean error = false;
	    boolean errorDup = false;
	    List<DetalleCarro> dCarro = new ArrayList<DetalleCarro>();
        String idproducto = detCarro.getIdProductoDetalle();
        String strQuery ="SELECT d FROM DetalleCarro d";
        Query query = null;
        query = entityManager
                .createQuery(strQuery);
         dCarro=(List<DetalleCarro>) query.getResultList();
        for(DetalleCarro det:dCarro){
            if(det.getIdProductoDetalle()==idproducto){
                errorDup=true;
                System.out.println("id producto en detalle :"+det.getIdProductoDetalle());
                System.out.println("id nuevo :"+idproducto);
            }
        }
        if(errorDup==false){
            try{
                entityManager.persist(detCarro);   
            }catch(Exception ex){
                error = true;
            } 
	    
        
        }
	   
        
	}
	public List<Producto> listarProductos(){
	    Query query = null;
        query = entityManager
                .createQuery("SELECT p FROM Producto p");
        return (ArrayList<Producto>) query.getResultList();
	}
    
	public Usuario obtenerUsuario(String nomUsu, String passUsu){
	    boolean error= false;
	    Usuario u = new Usuario();
	    u = entityManager.find(Usuario.class, nomUsu);
	    
	    return u;
	}
	public void crearCarro(Carro carro){
	    boolean error = false;

        try{
            entityManager.persist(carro);   
        }catch(Exception ex){
            error = true;
        }
        System.out.println("Error :"+error);
	}
	public boolean ingresarUsuario(String nomUsuario, String passUsu, String nom, String apellido ){
	   Usuario u = new Usuario();
	   boolean error = false;
	   u =  entityManager.find(Usuario.class, nomUsuario);
	   if(u != null){
	       error = true;
	       System.out.println("User name ingresado ya existe");
	   }else{
	         Usuario usu = new Usuario();
	         usu.setNombreUsuario(nomUsuario);
	         usu.setPass(passUsu);
	         usu.setNombre(nom);
	         usu.setApellido(apellido);
	   
	         try{
	             entityManager.persist(usu);   
	         }catch(Exception ex){
	             error = true;
	         }
	   }
	   return error;
	}
	
	public Producto obtenerProducto(String codPro){
	    Producto producto = new Producto();
	    producto = entityManager.find(Producto.class, codPro);
	    return producto;
	}
	
	public void asignarUsuarioaCarro(int idCarro, String nomUsuario){
	    Carro carro = entityManager.find(Carro.class, idCarro);
	    carro.setNomusuCarro(nomUsuario);
	}
	
	public void actualizarCarroCompra(int idCarro){
	    Carro carro = entityManager.find(Carro.class, idCarro);
	    carro.setComprafinCarro(1);
	}
	
	public void eliminarDetalle(int idDetalle){
	  DetalleCarro detalle = entityManager.find(DetalleCarro.class, idDetalle);
	  entityManager.remove(detalle);
	}
	
	public void actualizarCantidadDetalle(int idDetalle, int cant){
	    DetalleCarro detalle = entityManager.find(DetalleCarro.class, idDetalle);
	    detalle.setCantidadDetalle(cant);
	}
	
	public void actualizarCantidadProductosStock(String codProducto, int stockActual){
	    System.out.println("entro a actualizar Stock productos");
	    Producto producto = entityManager.find(Producto.class, codProducto);
	    producto.setStockProducto(stockActual);
	}
	/**
	 * @return the entityManager
	 */
	public EntityManager getEntityManager() {
		return entityManager;
	}

	/**
	 * @param entityManager the entityManager to set
	 */
	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}

    public List<Producto> obtenerProductos() {
        // TODO Auto-generated method stub
        return null;
    }

    public void asignarUsuarioaCarro(int idCarro) {
        // TODO Auto-generated method stub
        
    }

    
		
	
	
}
